import Cesium from '../../../Ces/Cesium';
import NavigationControl from './NavigationControl.js';
import svgReset from '../SvgPaths/svgReset.js';

// 假设 Terria 类型，如果有实际定义请替换为准确类型
type Terria = any;

/**
 * The model for a zoom in control in the navigation control tool bar
 *
 * @alias ResetViewNavigationControl
 * @constructor
 * @abstract
 *
 * @param {Terria} terria The Terria instance.
 */
class ResetViewNavigationControl extends NavigationControl {
    // 控制名称，设置为控件的标题
    name: string = '';
    // 导航是否锁定
    navigationLocked: boolean;
    // 控件的 SVG 图标
    declare svgIcon: any;
    // SVG 图标的高度
    declare svgHeight: number;
    // SVG 图标的宽度
    declare svgWidth: number;
    // 控件的 CSS 类名
    declare cssClass: string;

    constructor(terria: Terria) {
        super(terria);
        // 初始化控制名称
        // this.name = 'Reset View';
        this.navigationLocked = false;
        // 初始化 SVG 图标
        this.svgIcon = svgReset;
        // 初始化 SVG 图标的高度
        this.svgHeight = 15;
        // 初始化 SVG 图标的宽度
        this.svgWidth = 15;
        // 初始化 CSS 类名
        this.cssClass = "navigation-control-icon-reset";
    }

    // 设置导航锁定状态
    setNavigationLocked(locked: boolean): void {
        this.navigationLocked = locked;
    }

    // 重置视图
    resetView(): void {
        // this.terria.analytics.logEvent('navigation', 'click','reset');
        if (this.navigationLocked) {
            return;
        }
        const scene = this.terria.scene;
        const sscc = scene.screenSpaceCameraController;
        if (!sscc.enableInputs) {
            return;
        }

        (this as any).isActive = true;

        const camera = scene.camera;

        if (Cesium.defined(this.terria.trackedEntity)) {
            // 当跟踪时，不重置为默认视图，而是重置为跟踪实体的默认视图
            const trackedEntity = this.terria.trackedEntity;
            this.terria.trackedEntity = undefined;
            this.terria.trackedEntity = trackedEntity;
        } else {
            // 重置为选项中定义的默认位置或视图
            if (this.terria.options.defaultResetView) {
                if (this.terria.options.defaultResetView && this.terria.options.defaultResetView instanceof Cesium.Cartographic) {
                    camera.flyTo({
                        destination: scene.globe.ellipsoid.cartographicToCartesian(this.terria.options.defaultResetView)
                    });
                } else if (this.terria.options.defaultResetView && this.terria.options.defaultResetView instanceof Cesium.Rectangle) {
                    try {
                        Cesium.Rectangle.validate(this.terria.options.defaultResetView);
                        camera.flyTo({
                            destination: this.terria.options.defaultResetView
                        });
                    } catch (e) {
                        console.log("Cesium-navigation/ResetViewNavigationControl:   options.defaultResetView Cesium rectangle is  invalid!");
                    }
                }
            } else if (typeof camera.flyHome === "function") {
                camera.flyHome(1);
            } else {
                camera.flyTo({'destination': Cesium.Camera.DEFAULT_VIEW_RECTANGLE, 'duration': 1});
            }
        }

        (this as any).isActive = false;
    }

    // 当用户点击此控件时执行的操作
    activate(): void {
        this.resetView();
    }
}

export default ResetViewNavigationControl;
